10. 微调中的核心训练参数(Hyperparameters)
在大模型微调(Fine-tuning)中,
模型结构固然重要,但真正决定训练效果的通常是:
超参数(Hyperparameters)
例如:
- Learning Rate
- Batch Size
- Epoch
- Optimizer
- LoRA 参数
这些参数会直接影响:
- Loss 是否收敛
- 模型是否稳定
- 是否过拟合
- 显存占用
- 最终性能
1. Learning Rate(学习率)
学习率(LR)是:
微调中最重要的参数之一。
它决定:
模型每次更新权重时走多大一步。
2. 学习率过大(Too High)
如果:
learning_rate 太高
模型更新会非常激进。
可能导致:
- Loss 上下震荡
- 无法收敛
- 模型崩溃
- NaN
现象
graph LR A[学习率过高] --> B[参数更新过大] --> C[Loss震荡] --> D[训练不稳定]
3. 学习率过小(Too Low)
如果:
learning_rate 太低
模型虽然会学习。
但:
- 收敛非常慢
- Loss 几乎不下降
- 容易停滞
现象
graph LR A[学习率过低] --> B[参数更新太小] --> C[Loss下降缓慢] --> D[训练时间极长]
4. 好的 Learning Rate
一个合适的学习率通常表现为:
Loss 稳定下降,并逐渐收敛。
理想 Loss 曲线
Loss
│
│\
│ \
│ \
│ \
│ \____
│
└──────────
5. 动态学习率(LR Scheduler)
训练中通常不会一直使用固定学习率。
因为:
- 初期需要快速学习
- 后期需要稳定收敛
因此会使用:
Learning Rate Scheduler(学习率调度器)
6. Cosine Annealing(余弦退火)
一种经典策略:
Cosine Annealing(余弦退火)
特点:
- 前期学习率较高
- 后期逐渐减小
- 最终平滑收敛
变化趋势
LR
│\
│ \
│ \
│ \__
│ \___
│
└────────────
类似余弦曲线。
7. Linear Decay with Warmup
LLM 中更常见的方法:
Linear Decay + Warmup
Warmup(预热)
训练刚开始时:
learning rate 很小
然后:
逐渐增大。
因为:
- 初期梯度不稳定
- 大学习率容易炸掉训练
后期
Warmup 后:
学习率再缓慢下降。
流程图
graph LR A[Warmup 小学习率] --> B[逐渐升高] B --> C[达到峰值学习率] C --> D[线性下降] D --> E[稳定收敛]
8. Optimizer(优化器)
Optimizer 用于:
根据梯度更新模型参数。
9. 常见优化器
| Optimizer | 常见学习率 |
|---|---|
| SGD | 0.01 |
| Adam | 0.001 |
| AdamW | 5e-5(LLM常见) |
10. SGD(随机梯度下降)
最经典优化器:
SGD(Stochastic Gradient Descent)
更新公式:
参数 = 参数 - lr × gradient
特点:
- 简单
- 稳定
- 适合小模型
但对于 LLM:
收敛较慢。
11. Adam
Adam 会自动:
- 调整学习速度
- 平滑梯度
- 提升稳定性
因此:
更适合 Transformer 和 LLM。
12. AdamW
现代 LLM 最常见:
AdamW
相比 Adam:
- 更好的 Weight Decay
- 更好的泛化能力
- 更稳定
Transformers 示例
optimizer = AdamW(
model.parameters(),
lr=5e-5
)
13. Epoch(训练轮数)
Epoch 表示:
模型完整看过一次训练集。
例如:
epoch = 1
意味着:
所有训练数据训练了一遍。
14. Epoch 太少的问题
如果 Epoch 太少:
- 模型没学会
- Loss 还没收敛
- 能力提升有限
15. Epoch 太多的问题
如果 Epoch 太多:
- 容易过拟合
- 模型遗忘原能力
- 泛化下降
即:
Catastrophic Forgetting(灾难性遗忘)
16. Batch Size
Batch Size 指:
一次更新参数前,
同时处理多少训练样本。
17. 小 Batch
例如:
batch_size = 1
特点:
- 每条数据都更新一次
- 梯度噪声大
- 更新频繁
优点
- 显存占用小
缺点
- 不稳定
- 训练慢
18. 大 Batch
例如:
batch_size = 128
特点:
- 一次处理大量样本
- 更新更稳定
优点
- GPU 利用率高
- 收敛更稳定
缺点
- 显存需求大
- 容易 OOM(Out Of Memory)
19. OOM(显存不足)
如果出现:
CUDA out of memory
通常可以:
- 减少 batch size
- 使用 gradient accumulation
- 使用 LoRA
20. 监控 Loss
训练中最重要的指标:
| 指标 | 含义 |
|---|---|
| Training Loss | 训练集损失 |
| Validation Loss | 验证集损失 |
21. 理想训练过程
良好的训练通常表现为:
graph LR A[Training Loss下降] --> B[Validation Loss下降] B --> C[最终收敛]
22. 过拟合现象
如果:
- Training Loss 下降
- Validation Loss 上升
说明:
模型开始记忆训练集。
过拟合图
Train Loss ↓
Validation Loss ↑
23. Checkpoint(检查点)
训练过程中通常会保存:
Checkpoint(模型检查点)
用于:
- 恢复训练
- 评估不同阶段模型
- 回滚最佳模型
24. Reproducibility(可复现性)
训练中存在:
- 随机初始化
- 随机采样
- Batch Shuffle
因此:
每次训练结果可能不同。
25. Random Seed(随机种子)
为了提升复现性:
通常设置:
torch.manual_seed(42)
这样:
- 数据顺序
- 初始化
- 采样
会更稳定。
26. 微调的显存需求
全量微调(Full Fine-tuning)非常耗显存。
因为除了模型权重:
还需要存储:
- 梯度(Gradient)
- Optimizer State
- 激活值(Activation)
27. 显存为什么是模型的 2~3 倍
例如:
7B 模型
参数本身可能占:
14GB
但训练时:
- Gradient
- Adam 状态
还会额外占用大量显存。
因此:
实际训练显存通常是模型大小的 2~3 倍。
28. LoRA(Low-Rank Adaptation)
LoRA 是目前最常见的大模型微调技术之一。
核心思想:
不更新全部参数,
只训练少量低秩矩阵。
29. LoRA 的数学思想
原始权重:
W
LoRA 不直接更新:
W
而是增加:
ΔW = A × B
其中:
- A 和 B 是低秩矩阵
- 参数量远小于原模型
最终:
W_new = W + ΔW
30. LoRA 流程图
graph LR A[原始模型权重 W] --> B[冻结 Frozen] C[LoRA 小矩阵 A/B] --> D[训练更新] B --> E[最终权重] D --> E
31. 为什么 LoRA 很有效
因为 Transformer 中:
大部分知识已经存在。
微调只需要:
“轻微调整”。
因此不需要更新全部参数。
32. LoRA 的优势
| 优势 | 说明 |
|---|---|
| 显存占用小 | 只训练少量参数 |
| 训练速度快 | 梯度更少 |
| 成本低 | 单卡可训练 |
| 易部署 | 可单独保存 Adapter |
33. 为什么 LoRA 学习率更高
由于:
- 可训练参数更少
- 更新范围更小
因此通常使用:
比全量微调高约 10 倍的学习率。
例如:
| 方法 | LR |
|---|---|
| Full FT | 5e-5 |
| LoRA | 1e-4 ~ 1e-3 |
34. Alpha 参数
LoRA 中重要参数:
alpha
作用:
控制 LoRA 更新对原模型的影响强度。
简化理解
alpha 越大
→ LoRA 影响越强
35. 一句话总结
Learning Rate:
决定模型每次学多少。
Batch Size:
决定一次看多少数据。
Epoch:
决定模型看几遍数据。
Optimizer:
决定如何更新参数。
LoRA:
用极少参数高效微调大模型。